package com.gccloud.design.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gccloud.design.dao.ParameterConfigDao;
import com.gccloud.design.entity.ParameterConfigEntity;
import com.gccloud.design.service.ParameterConfigService;
import com.gccloud.design.vo.ParameterConfigVo;
import com.gccloud.feign.filter.dto.SysUser;
import com.gccloud.idc.security.shiro.UserUtils;
import com.gccloud.starter.common.dto.SearchDTO;
import com.gccloud.starter.core.vo.PageVO;
import com.gccloud.starter.mybatis.utils.QueryWrapperUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;


@Service

public class ParameterConfigServiceImpl extends ServiceImpl<ParameterConfigDao, ParameterConfigEntity> implements ParameterConfigService {

    @Resource
    private ParameterConfigDao parameterConfigDao;


    @Override
    public Integer insert(ParameterConfigEntity parameterConfigEntity) {
        SysUser currentUser = UserUtils.getCurrentUser();
        parameterConfigEntity.setCreatedName(currentUser.getName()).setCreatedTime(new Date());
        int num = parameterConfigDao.insert(parameterConfigEntity);
        return num;
    }


    @Override
    public Integer update(ParameterConfigEntity parameterConfigEntity) {
        SysUser currentUser = UserUtils.getCurrentUser();
        parameterConfigEntity.setModifiedName(currentUser.getName()).setModifiedTime(new Date());
        LambdaUpdateWrapper<ParameterConfigEntity> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(ParameterConfigEntity::getId,parameterConfigEntity.getId());
        int row = parameterConfigDao.update(parameterConfigEntity,updateWrapper);
        return row;
    }

    @Override
    //构造查询条件wrapper
    public PageVO<ParameterConfigVo> selectByPage(SearchDTO searchDTO) {
        //进行模糊查询所有delFlag=0的数据
        LambdaQueryWrapper<ParameterConfigEntity> wrapper = QueryWrapperUtils.
                wrapperLike(new LambdaQueryWrapper<ParameterConfigEntity>().eq(ParameterConfigEntity::getDelFlag, 0),
                        searchDTO.getSearchKey(), ParameterConfigEntity::getParamName);
        //分页查询
        Page<ParameterConfigEntity> searchPage = new Page<>(searchDTO.getCurrent(), searchDTO.getSize());
        Page<ParameterConfigEntity> entityPage = page(searchPage, wrapper);  //这里的page进行了方法封装,见源码,就相当于调用的selectPage方法
        PageVO<ParameterConfigVo> objectPageVO = new PageVO(entityPage);
        objectPageVO.setTotalCount(entityPage.getTotal());
        return objectPageVO;
    }

    @Override
    public boolean delete(List<Integer> ids) {
        List<ParameterConfigEntity> list = ids.stream().map(id -> {
            ParameterConfigEntity entity = new ParameterConfigEntity();
            entity.setId(id).setDelFlag(1);
            return entity;
        }).collect(Collectors.toList());
        return updateBatchById(list);
    }

    /**
     * 数组写法
     * @param ids
     * @return
     */
//    @Override
//    public Boolean delParameterConfig(Integer[] ids) {
//        int result = 0;
//        if (ids.length > 0) {
//            for (Integer id : ids) {
//                QueryWrapper<ParameterConfigEntity> queryWrapper = new QueryWrapper<>();
//                ParameterConfigEntity parameterConfigEntity = parameterConfigDao.selectOne(queryWrapper.eq("id", id).eq("del_flag", 0));
//                UpdateWrapper<ParameterConfigEntity> updateWrapper = new UpdateWrapper<>();
//                updateWrapper.eq("id", id).set("del_flag", 1);
//                result = parameterConfigDao.update(parameterConfigEntity, updateWrapper);
//            }
//        }
//        return result > 0;
//    }



    /**
     * 这是第二种写法,记得ids.forEach(id->{}传值时别把ids传值成了list
     * @return
     */

//    @Override
//    public boolean delete(List<Integer> ids){
//        ArrayList<ParameterConfigEntity> list = new ArrayList<>();
//        ids.forEach(id->{
//            ParameterConfigEntity entity = new ParameterConfigEntity();
//            entity.setId(id).setDelFlag(1);
//            list.add(entity);
//        });
//         parameterConfigDao.deleteBatchIds(list);
//         return true;
//    }

}
